<?php
include_once 'Element.php';

/**
 * Input type Text HTML
 */
class TextBox extends Element {

    /**
     * Value del Input Text
     * @var String
     */
    private $value;
    
    /**
     * Ancho del Input Text
     * @var String Valor de anchura en px o %
     */
    private $width;
    
    /**
     * Estado del tag Disabled del Input Text
     * @var Boolean
     */
    private $disabled;
    
    /**
     * Solo numeros en el Input Text
     * @var Boolean true = solo números; 
     */
    private $onlyNumbers;
    
    /**
     * Solo Fecha en el Input Text
     * @var Boolean true = solo Fecha
     */
    private $isDate;
    
    /**
     * Maximo de Caracteres en el Input Text
     * @var type 
     */
    private $maxChars;
    
    /**
     * Evento javascript en el OnBlur del Input Text
     * @var String text/javascript
     */
    private $onBlur;
    
    /**
     * Evento javascript rn rl onKeyUp del Input Text
     * @var String text/javascript
     */
    private $onKeyUp;
    
    /**
     * Input Text de tipo Password
     * @var Boolean true = tipo password
     */
    private $isPassword;
    
    private $autocomplete;

    public function __construct($id, $value = '') {
        parent::__construct($id);
        $this->value = $value;
    }

    public function generate() {
        $html = array();
        $name = parent::getId();
        
        $width = '';
        if($this->width)
            $width = 'style="width:'.$this->width . 'px"';
        $value = '';
        if($this->value)
            $value = 'value="' . $this->value . '"';
        $onBlur = "";
        if($this->onBlur)
            $onBlur = 'onblur="' . $this->onBlur . '"';
        $onKeyUp = '';
        if($this->isDate) {
            $html[] = '
                <script type="text/javascript">
                    function IsNumeric(valor) 
                    { 
                        var log=valor.length; var sw="S"; 
                        for (x=0; x<log; x++) 
                        { v1=valor.substr(x,1); 
                            v2 = parseInt(v1); 
                            //Compruebo si es un valor numérico 
                            if (isNaN(v2)) { sw= "N";} 
                        } 
                        if (sw=="S") {return true;} else {return false; } 
                    } 
                    var primerslap=false; 
                    var segundoslap=false; 
                    function formateafecha(fecha) 
                    { 
                        var long = fecha.length; 
                        var dia; 
                        var mes; 
                        var ano; 
                        if ((long>=2) && (primerslap==false)) { dia=fecha.substr(0,2); 
                            if ((IsNumeric(dia)==true) && (dia<=31) && (dia!="00")) { fecha=fecha.substr(0,2)+"/"+fecha.substr(3,7); primerslap=true; } 
                            else { fecha=""; primerslap=false;} 
                        } 
                        else 
                        { dia=fecha.substr(0,1); 
                            if (IsNumeric(dia)==false) 
                            {fecha="";} 
                            if ((long<=2) && (primerslap=true)) {fecha=fecha.substr(0,1); primerslap=false; } 
                        } 
                        if ((long>=5) && (segundoslap==false)) 
                        { mes=fecha.substr(3,2); 
                            if ((IsNumeric(mes)==true) &&(mes<=12) && (mes!="00")) { fecha=fecha.substr(0,5)+"/"+fecha.substr(6,4); segundoslap=true; } 
                            else { fecha=fecha.substr(0,3);; segundoslap=false;} 
                        } 
                        else { if ((long<=5) && (segundoslap=true)) { fecha=fecha.substr(0,4); segundoslap=false; } } 
                        if (long>=7) 
                        { ano=fecha.substr(6,4); 
                            if (IsNumeric(ano)==false) { fecha=fecha.substr(0,6); } 
                            else { if (long==10){ if ((ano==0) || (ano<1900) || (ano>2100)) { fecha=fecha.substr(0,6); } } } 
                        } 
                        if (long>=10) 
                        { 
                            fecha=fecha.substr(0,10); 
                            dia=fecha.substr(0,2); 
                            mes=fecha.substr(3,2); 
                            ano=fecha.substr(6,4); 
                            // Año no viciesto y es febrero y el dia es mayor a 28 
                            if ( (ano%4 != 0) && (mes ==02) && (dia > 28) ) { fecha=fecha.substr(0,2)+"/"; } 
                        } 
                        return (fecha); 
                    }
                </script>
            ';
            $onKeyUp = '
                onKeyUp = "this.value=formateafecha(this.value);"
            ';
        }
        
        if($this->autocomplete) {
            $html[] = '
            <script type="text/javascript">
                $().ready(function() {
                    $("#'.parent::getId().'").autocomplete("'.$this->autocomplete.'", {
                        width: 260,
                        matchContains: true,
                        selectFirst: false
                    });
                });
            </script>    
            ';
        }
        
        if ($this->onlyNumbers) {
            
            $onKeyPress = '
                onkeypress = "
                    if ((event.keyCode > 47 && event.keyCode < 58)||event.keyCode == 46) {
                        event.returnValue = true;
                    } else event.returnValue = false;
                "
            ';
        } else
            $onKeyPress = '';

        if ($this->onKeyUp) {
            $onKeyUp = 'onkeyup = "' . $this->onKeyUp . '"';
        }
            

        if ($this->disabled)
            $visibility = "disabled='true'";
        else
            $visibility = '';

        if ($this->maxChars)
            $max = 'maxlength="' . $this->maxChars . '"';
        else
            $max = '';

        $type = 'text';
        if($this->isPassword)
            $type = 'password';
        

        $html[] = "<input $max $onKeyPress $onKeyUp $onBlur $visibility $width id='$name' name='$name' type='$type' $value \>";


        $output = '';
        foreach ($html as $code) {
            $output = $output . $code;
        }
        return (String) $output;
    }

    public function getOnBlur() {
        return $this->onBlur;
    }

    public function setOnBlur($onBlur) {
        $this->onBlur = $onBlur;
    }

    public function getValue() {
        return $this->value;
    }

    public function setValue($value) {
        $this->value = $value;
    }

    public function getWidth() {
        return $this->width;
    }

    public function setWidth($width) {
        $this->width = $width;
    }

    public function getDisabled() {
        return $this->disabled;
    }

    public function setDisabled($disabled) {
        $this->disabled = $disabled;
    }

    public function getOnlyNumbers() {
        return $this->onlyNumbers;
    }

    public function setOnlyNumbers($onlyNumbers) {
        $this->onlyNumbers = $onlyNumbers;
    }

    public function getMaxChars() {
        return $this->maxChars;
    }

    public function setMaxChars($maxChars) {
        $this->maxChars = $maxChars;
    }

    public function getOnKeyUp() {
        return $this->onKeyUp;
    }

    public function setOnKeyUp($onKeyUp) {
        $this->onKeyUp = $onKeyUp;
    }
    
    public function getIsDate() {
        return $this->isDate;
    }

    public function setIsDate($isDate) {
        $this->isDate = $isDate;
    }
    
    public function getIsPassword() {
        return $this->isPassword;
    }

    public function setIsPassword($isPassword) {
        $this->isPassword = $isPassword;
    }
    
    public function getAutocomplete() {
        return $this->autocomplete;
    }

    public function setAutocomplete($url) {
        $this->autocomplete = $url;
    }








}

?>
